/*
 * PagFormularioConferencia.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlAtividade;
import srac.controleatividades.cdp.Aluno;
import srac.controleatividades.cdp.AtividadeComplementar;
import srac.controleatividades.cdp.Etapa;
import srac.controleatividades.cdp.StatusAtividadeComplementar;

public class PagFormularioConferencia extends GenericForwardComposer {

    private CtrlAtividade ctrlAtividade = CtrlAtividade.getInstance();
    private Window winFormularioConferencia;
    private Listbox listAtividades;
    
    private Aluno obj;
    List<AtividadeComplementar> atividades;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);

        Etapa etapa = ctrlAtividade.obterEtapaAtual();
        obj = (Aluno) arg.get("obj");
        ctrlAtividade.setPagFormularioConferencia(this);

        if (obj != null) {
            atividades = ctrlAtividade.obterAtividadesComplementares(obj, etapa); //Obtem todas as atividades na etapa atual do aluno
        }

        if (atividades != null) {
            for (int i = 0; i < atividades.size(); i++) {
                AtividadeComplementar a = atividades.get(i);
                Listitem linha = new Listitem(atividades.get(i).getTipoAtividade().getCategoria().getNome(), a);

                linha.appendChild(new Listcell(atividades.get(i).getTipoAtividade().toString()));
                linha.appendChild(new Listcell(atividades.get(i).getDescricao()));
                linha.appendChild(new Listcell(statusPag(atividades.get(i))));
                

                

                linha.setParent(listAtividades);
            }
        }
    }

    public void onCreate$winFormularioConferencia() {

//        if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winFormularioConferencia.detach();
        }
    }

    public void onClick$aceitarAtividade(Event event) { //Muda o status da atividade selecionada para confirida
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            try {
                ctrlAtividade.registrarResultadoConferencia(a, StatusAtividadeComplementar.CONFERIDA);
            } 
            catch (Exception ex) {
                Messagebox.show("Erro em aceitar a atividade", "Erro", 0, Messagebox.ERROR);
            }
            refreshAtividade(a);
        }
    }

    public void onClick$recusarAtividade(Event event) { //Muda o status da atividade selecionada para irregular
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            try {
                ctrlAtividade.registrarResultadoConferencia(a, StatusAtividadeComplementar.IRREGULAR);
            } 
            catch (Exception ex) {
                Messagebox.show("Erro em recusar a atividade", "ERRO", 0, Messagebox.ERROR);
            }
            refreshAtividade(a);
        }
    }

    public void onClick$encerrarAtividades(Event event) {
        boolean b=false;
        for (AtividadeComplementar a : atividades) { //Percorre as atividades do aluno
            if(a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.SUBMETIDA)) //Se alguma está submetida, quer dizer q a secretária ainda não conferiu todas as atividades
            {
                b = true;
                break;
            }
        }
        if(!b) //Se a secretária conferiu todas as atividades, o status do aluno é modificado
        {
            if (ctrlAtividade.registrarResultado(atividades, obj)) {
                ctrlAtividade.refreshAluno(obj);
            }
        }
        //Senão nada é alterado
        
        winFormularioConferencia.onClose(); //Fechar a pag
    }

    public void refreshAtividade(AtividadeComplementar a) {
        for (int i = 0; i < listAtividades.getItemCount(); i++) {
            if (listAtividades.getItemAtIndex(i).getValue() == a) {
                listAtividades.getItemAtIndex(i).getChildren().clear();
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getTipoAtividade().getCategoria().getNome()));
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getTipoAtividade().toString()));
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(a.getDescricao()));
                listAtividades.getItemAtIndex(i).appendChild(new Listcell(statusPag(a)));
                break;
            }
        }
    }
    
    private String statusPag(AtividadeComplementar a) //Metodo para reescrever os enuns na tela
    {
        if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.IRREGULAR)) 
        {
            return "Recusada";        
        } 
        else if (a.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.CONFERIDA)) 
        {
            return "Aceita";
        } 
        else
        {
            return "Nao Conferida";
        }
    }
    
    public void onClick$baixarArquivo(Event event) { //Baixar o arquivo da atividade
        File arquivo;
        Listitem listitem = listAtividades.getSelectedItem();
        if (listitem != null) {
            AtividadeComplementar a = listitem.getValue();
            arquivo = ctrlAtividade.recuperaArquivoPDF(a.getArquivo(), a.getAluno().getMatricula()); //Pega o arquivo do aluno
            
            if (arquivo != null) {
                Filedownload fd = null;
                try {
                    fd.save(arquivo, null); //Baixa o arquivo
                } 
                catch (FileNotFoundException ex) {
                    Messagebox.show("Erro no download do arquivo", "ERRO", 0, Messagebox.ERROR);
                }
            }
        } 
        else {
            Messagebox.show("Selecione uma atividade", "Alerta!", 0, Messagebox.EXCLAMATION);
        }
    }

 

}
